package api

import (
	"cmall/pkg/logging"
	"cmall/pkg/util/sdk"
	"cmall/serializer"
	"cmall/service"

	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"
)

// @Summary  用户注册
// @Description 用户注册接口
// @Tags 用户功能实现
// @Accept json
// @Param data body service.UserRegisterService true "演示参数"
// @Produce json
// @Success 200
// @Router /user/register [post]
func UserRegister(c *gin.Context) {
	session := sessions.Default(c)
	status := session.Get(sdk.GEETEST_SERVER_STATUS_SESSION_KEY)
	userID := session.Get("userId")
	var service service.UserRegisterService
	if err := c.ShouldBind(&service); err == nil {
		res := service.Register(userID, status)
		c.JSON(200, res)
	} else {
		c.JSON(200, ErrorResponse(err))
		logging.Info(err)
	}
}

// @Summary  用户登陆
// @Description 用户登陆接口
// @Tags 用户功能实现
// @Accept json
// @Param data body service.UserLoginService true "演示参数"
// @Produce json
// @Success 200
// @Router /user/login [post]
// UserLogin 用户登录接口
func UserLogin(c *gin.Context) {
	session := sessions.Default(c)
	status := session.Get(sdk.GEETEST_SERVER_STATUS_SESSION_KEY)
	userID := session.Get("userId")
	var service service.UserLoginService
	if err := c.ShouldBind(&service); err == nil {
		res := service.Login(userID, status)
		c.JSON(200, res)
	} else {
		c.JSON(200, ErrorResponse(err))
		logging.Info(err)
	}
}

// @Summary  用户更新
// @Description 用户更新接口
// @Tags 用户功能实现
// @Accept json
// @Param data body service.UserUpdateService true "演示参数"
// @Produce json
// @Success 200
// @Router /user/login [put]
// UserLogin 用户更新接口
func UserUpdate(c *gin.Context) {
	var service service.UserUpdateService
	if err := c.ShouldBind(&service); err == nil {
		res := service.Update()
		c.JSON(200, res)

	} else {
		c.JSON(200, ErrorResponse(err))
		logging.Info(err)
	}
}

// CheckToken 用户详情
func CheckToken(c *gin.Context) {
	c.JSON(200, serializer.Response{
		Status: 200,
		Msg:    "ok",
	})
}

// // SendEmail 发送邮件接口
// func SendEmail(c *gin.Context) {
// 	var service service.SendEmailService
// 	if err := c.ShouldBind(&service); err == nil {
// 		res := service.Send()
// 		c.JSON(200, res)
// 	} else {
// 		c.JSON(200, ErrorResponse(err))
// 		logging.Info(err)
// 	}
// }

// // VaildEmail 绑定和解绑邮箱接口
// func VaildEmail(c *gin.Context) {
// 	var service service.VaildEmailService
// 	if err := c.ShouldBind(&service); err == nil {
// 		res := service.Vaild()
// 		c.JSON(200, res)
// 	} else {
// 		c.JSON(200, ErrorResponse(err))
// 		logging.Info(err)
// 	}
// }

// // InitQQ 初始化QQ
// func InitQQ(c *gin.Context) {
// 	service := service.InitQQService{}
// 	res := service.Init()
// 	c.JSON(200, res)
// }

// // VaildQQ 查询，一键注册，绑定接口
// func VaildQQ(c *gin.Context) {
// 	var service service.VaildQQService
// 	if err := c.ShouldBind(&service); err == nil {
// 		res := service.Vaild()
// 		c.JSON(200, res)
// 	} else {
// 		c.JSON(200, ErrorResponse(err))
// 		logging.Info(err)
// 	}
// }

// // InitGeetest 极验初始化
// func InitGeetest(c *gin.Context) {
// 	gtLib := sdk.NewGeetestLib(os.Getenv("GEETEST_ID"), os.Getenv("GEETEST_KEY"))
// 	digestmod := "md5"
// 	userID := "test"
// 	params := map[string]string{
// 		"digestmod":   digestmod,
// 		"user_id":     userID,
// 		"client_type": "web",
// 		"ip_address":  "120.25.207.25",
// 	}
// 	result := gtLib.Register(digestmod, params)
// 	// 将结果状态写到session中，此处register接口存入session，后续validate接口会取出使用
// 	// 注意，此demo应用的session是单机模式，格外注意分布式环境下session的应用
// 	session := sessions.Default(c)
// 	session.Set(sdk.GEETEST_SERVER_STATUS_SESSION_KEY, result.Status)
// 	session.Set("userId", userID)
// 	session.Save()
// 	// 注意，不要更改返回的结构和值类型
// 	c.Header("Content-Type", "application/json;charset=UTF-8")
// 	c.String(http.StatusOK, result.Data)
// }
